﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using EF;
using BL;
using BL.Entities;
using System.IO;

namespace ApriBox.Mvc.Controllers
{
    public class DownloadController : Controller
    {
        //
        // GET: /Download/


        FSEntitiesRepository repository = new FSEntitiesRepository();            
      
        //Скачивание Файлов
        [Authorize]
        public FilePathResult DownloadFile()
        {

            //Формируем файл для скачки
            BL.Entities.File file = repository.GetFileById(Convert.ToInt32(RouteData.Values["id"]));

            string fileName = file.Name;
            string contentType = file.Extension;
            string physicalPath = file.PhysicalPath;
            return File(physicalPath, contentType, fileName);

        }


        //Скачивание папок
        [Authorize]
        public FilePathResult DownloadFolder()
        {
            int id = Convert.ToInt32(RouteData.Values["id"]);

            //Создаем коллекцию в которую будут помещятсья пути к виртуальным файлам внтри папки + реальные пути
            List<BL.FileForZip> ffz = new List<BL.FileForZip>();
            string nameParentFolder = repository.GetFoldersById(id).Name;

            //Заполняем наш Лист List<BL.FileForZip> ffz   списком файлов\подпапок
            repository.GetStructOfFilesByParentId(id, ffz, nameParentFolder);

            //Создаем уникальное имя Zip файлу
            TimeSpan span = DateTime.Now.Subtract(new DateTime(1970, 1, 1, 0, 0, 0));
            System.IO.Directory.CreateDirectory(Server.MapPath("~/App_Data/Uploaded/Temp"));
            string pathToSaveZip = Server.MapPath("~/App_Data/Uploaded/Temp/") + span.TotalMilliseconds + ".zip";

            //Вызываем создание файла
            BL.FileForZip.MakeZipArchive(ffz, pathToSaveZip);

            //Возвращаем файл
            return File(pathToSaveZip, "application/zip", nameParentFolder + ".zip");

        }





        // GET: /Downloadan/
        [AllowAnonymous]
        public ActionResult File()
        {

            BL.Entities.File file = repository.GetFileBySharingLink(RouteData.Values["id"].ToString());
            if (file != null)
            {
                string fileName = file.Name;
                string contentType = file.Extension;
                string physicalPath = file.PhysicalPath;
                return File(physicalPath, contentType, fileName);
            }
            else
                return new  EmptyResult();
            }



        [AllowAnonymous]
        public ActionResult Folder()
        {
            BL.Entities.Folder folder = repository.GetFolderBySharingLink(RouteData.Values["id"].ToString());

            if (folder != null)
            {
            int id = folder.Id;

            //Создаем коллекцию в которую будут помещятсья пути к виртуальным файлам внтри папки + реальные пути
            List<BL.FileForZip> ffz = new List<BL.FileForZip>();
            string nameParentFolder = repository.GetFoldersById(id).Name;

            //Заполняем наш Лист List<BL.FileForZip> ffz   списком файлов\подпапок
            repository.GetStructOfFilesByParentId(id, ffz, nameParentFolder);

            //Создаем уникальное имя Zip файлу
            TimeSpan span = DateTime.Now.Subtract(new DateTime(1970, 1, 1, 0, 0, 0));
            Directory.CreateDirectory(Server.MapPath("~/App_Data/Uploaded/Temp"));
            string pathToSaveZip = Server.MapPath("~/App_Data/Uploaded/Temp/") + span.TotalMilliseconds + ".zip";

            //Вызываем создание файла
            BL.FileForZip.MakeZipArchive(ffz, pathToSaveZip);

            //Возвращаем файл
            return File(pathToSaveZip, "application/zip", nameParentFolder + ".zip");

             }
            else
                return new  EmptyResult();
        }





    }
}
